home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / DDJMAG / DDJ9203.ZIP / OOPASM.ZIP / MOUSE.ASM < prev    next >
Assembly Source File  |  1994-03-04  |  4KB  |  175 lines

  1.     .MODEL    SMALL
  2.  
  3.     INCLUDE    equates.inc
  4.     INCLUDE    messages.inc
  5.     INCLUDE    instance.inc
  6.     INCLUDE    objects.inc
  7.  
  8.     MouseCursor    EQU    30d        ;Character code for cursor
  9.  
  10. IF1
  11.     INCLUDE    macros.mac
  12.     INCLUDE    objects.mac
  13. ENDIF
  14.  
  15.     EXTRN    sendMsg:NEAR
  16.  
  17.     EXTRN    Self:WORD
  18.  
  19.     .CODE
  20.  
  21. IF Dbug
  22.     PUBLIC    mouseReset
  23. ENDIF
  24. COMMENT    %
  25. ==============================================================================
  26. Resets the mouse. 
  27.  
  28. =============================================================================%
  29. mouseReset      PROC    NEAR 
  30.     push        es
  31.     xor        ax,ax
  32.     mov        es,ax
  33.     mov         si,204d
  34.     neq        ax,es:[si],mr1           ;Jump if we have a vector
  35.     eq        ax,es:[si+2],mr2       ;Jump if no vector
  36. mr1:    int         33h
  37. mr2:    setInst         ?Mouse,al,Mouse        ;Set flag if mouse present
  38.     pop        es
  39.     ret
  40. mouseReset      ENDP 
  41.  
  42.  
  43.  
  44. IF Dbug
  45.     PUBLIC    ?UpdateMouseCursor
  46. ENDIF
  47. COMMENT    %
  48. ==============================================================================
  49. Update the mouse cursor if its state has changed.
  50.  
  51. =============================================================================%
  52. ?UpdateMouseCursor      PROC    NEAR 
  53.     getInst        al,?Mouse,Mouse
  54.     identity    al,umc1            ;Exit if no mouse installed
  55.  
  56.     mov        ax,1            ;Enable function code
  57.     int        33h            ;Show cursor
  58.  
  59.     getInst        al,?NewState,Mouse    ;Get new state flag
  60.     null        al,umc1            ;Exit if not new state
  61.  
  62.     mov        ax,10            ;Function number
  63.     xor        bx,bx            ;Want s/w cursor
  64.     mov        cx,7700h        ;Screen mask
  65.     mov        dx,MouseCursor        ;Cursor mask
  66.     int         33h            ;Update mouse cursor
  67.  
  68. umc1:    ret
  69. ?UpdateMouseCursor      ENDP 
  70.  
  71.  
  72.  
  73. COMMENT    %
  74. ==============================================================================
  75. Makes the mouse cursor visible.
  76.  
  77. =============================================================================%
  78. showMouseCursor      PROC    NEAR 
  79.     getInst        al,?Mouse,Mouse
  80.     identity    al,smc1            ;Exit if no mouse installed
  81.     mov        ax,1            ;Enable function code
  82.     int        33h            ;Show cursor
  83. smc1:    ret
  84. showMouseCursor      ENDP 
  85.  
  86.  
  87.  
  88.     PUBLIC    hideMouseCursor
  89. COMMENT    %
  90. ==============================================================================
  91. Makes the mouse cursor invisible.
  92.  
  93. =============================================================================%
  94. hideMouseCursor      PROC    NEAR 
  95.     getInst        al,?Mouse,Mouse
  96.     identity    al,hmc1            ;Exit if no mouse installed
  97.     mov        ax,2            ;Disable function code
  98.     int        33h            ;Hide cursor
  99. hmc1:    ret
  100. hideMouseCursor      ENDP 
  101.  
  102.  
  103.  
  104. IF Dbug
  105.     PUBLIC    getMouseStatus
  106. ENDIF
  107. COMMENT    %
  108. ==============================================================================
  109. Makes the mouse cursor visible.
  110.  
  111. =============================================================================%
  112. getMouseStatus      PROC    NEAR 
  113.     getInst        al,?Mouse,Mouse
  114.     identity    al,gms1            ;Exit if no mouse installed
  115.  
  116.     mov        ax,3            ;Status function code
  117.     int        33h            ;Get mouse status
  118.  
  119.     setInst        ?NewState,Nil,,1    ;Clear new mouse state flag
  120.     getInst        bh,Status        ;Get last number of status
  121.     eq        bh,bl,gms2        ;Jump if no change
  122.  
  123.     setInst        ?NewState,1,,1        ;Flag as new mouse state
  124.     and        bl,1            ;Mask off other buttons' status
  125.     setInst        Status,bl        ;Save number of button status
  126.  
  127. gms2:    push        cx            ;Save column
  128.     push        dx            ;Save row
  129.     pop        ax            ;Get row
  130.     mov        cl,8            ;Calc 24X80 row
  131.     div        cl
  132.     getInst        ah,Row1            ;Get last mouse row
  133.     eq        ah,al,gms3        ;Jump if no change
  134.     setInst        ?NewState,1,,1        ;Flag as new mouse state
  135.     setInst        Row1,al            ;Save mouse row
  136.  
  137. gms3:    pop        ax            ;Get column
  138.     div        cl            ;Calc 24X80 column
  139.     getInst        ah,Col1            ;Get last mouse column
  140.     eq        ah,al,gms1        ;Jump if no change
  141.     setInst        ?NewState,1,,1        ;Flag as new mouse state
  142.     setInst        Col1,al            ;Save mouse column
  143.  
  144. gms1:    ret
  145. getMouseStatus      ENDP 
  146.  
  147.  
  148.  
  149.     .DATA
  150.  
  151. defMsg    Mouse,\
  152.     Init,\
  153.     <mouseReset,,showMouseCursor>
  154.  
  155. defMsg    Mouse,\
  156.     Read,\
  157.     <,,getMouseStatus>
  158.  
  159. defMsg    Mouse,\
  160.     Refresh,\
  161.     <,,?UpdateMouseCursor>
  162.  
  163. defObj    Mouse,\
  164.     <>,\
  165.     <Row1,1,0,\
  166.     Col1,1,0,\
  167.     Status,1,0,\
  168.     ?Mouse,1,0,\
  169.     ?NewState,1,Nil>,\
  170.     <Init,Read,Refresh>
  171.  
  172.  
  173.  
  174.     END
  175.